---
title: SAIF.Business.Claim operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: SAIF Documentation Generator
last_reviewed: 2026-08-21
library: SAIF.Business.Claim
reference_type: embedded
---

# SAIF.Business.Claim operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Benefit-payment stop processing](operations/benefit-payment-stop.md) | Stop remaining scheduled benefit payments when a payment has been released | Caller invokes `ProcessBenefitPayment(claimId, callingApplication)` | ClaimID, CallingApplication, CallingFunction | Updated/deleted schedule and payment rows, StopStatus | [BR-009](business-rules.md#br-009-benefit-schedule-update-must-affect-a-row), [BR-010](business-rules.md#br-010-benefit-payment-delete-must-affect-a-row) | [CL_BENEFIT_SCHEDULE](database-tables.md#cl_benefit_schedule), [CL_BENEFIT_PAYMENT](database-tables.md#cl_benefit_payment) | [SQL-011](sql/SQL-011.md), [SQL-012](sql/SQL-012.md) |
| [Set award to Pending](operations/award-pending.md) | Move an active award to Pending status and cascade benefit-payment updates | `AfterUpdate` when award status is set to `'P'` | ClaimID, AwardNum | Updated award and benefit-payment rows | [BR-011](business-rules.md#br-011-award-must-be-successfully-updated-to-pending) | [CL_AWARD](database-tables.md#cl_award), [CL_BENEFIT_PAYMENT](database-tables.md#cl_benefit_payment) | [SQL-031](sql/SQL-031.md), [SQL-048](sql/SQL-048.md) |
| [Injured body-part maintenance](operations/injured-body-part.md) | Maintain injured body parts for a claim and enforce single-primary rules | Caller creates/updates/deletes an injured body part | ClaimID, BodyPartCode, BodyPartSideCode, PrimaryIndicator | Injured body-part rows, propagated CL_INJURY_CLAIM columns | [BR-006](business-rules.md#br-006-primary-body-part-is-required), [BR-007](business-rules.md#br-007-only-one-primary-body-part-is-allowed) | [CL_WORKER_INJURED_BODY_PART](database-tables.md#cl_worker_injured_body_part), [CL_INJURY_CLAIM](database-tables.md#cl_injury_claim) | [SQL-008](sql/SQL-008.md), [SQL-050](sql/SQL-050.md), [SQL-051](sql/SQL-051.md) |
| [Dynamic claim list generation](operations/claim-list-generation.md) | Execute a caller-supplied SQL statement to build an ad-hoc claim list | Caller invokes `GetClaimListCollection(dpi, sqlStatement, id)` | Caller-supplied SQL text, ID | Configurable claim-list rows | — | (caller-determined) | [SQL-019](sql/SQL-019.md) |
| [DCBS 1502 transfer handling](operations/1502-transfer.md) | Create, retrieve, and process DCBS 1502 transfer files | Transfer file creation, sweep, or marking as processed | ClaimID, FileId, FileName | Transfer records; processed-date updates | [BR-001](business-rules.md#br-001-1502-transfer-claim-id-required), [BR-002](business-rules.md#br-002-1502-transfer-filing-reason-required) | [CL_1502_DCBS_TRANSFER](database-tables.md#cl_1502_dcbs_transfer) | [SQL-004](sql/SQL-004.md), [SQL-037](sql/SQL-037.md) |
| [Stored-procedure read models](operations/stored-proc-lookups.md) | Retrieve claim-related calculated values from Oracle stored procedures | Caller retrieves aggravation-rights dates, timeliness of first payment, medically-stationary date, or statutory weekly wage | ClaimID and calculation-specific inputs | Calculated result values via REF CURSOR | [BR-008](business-rules.md#br-008-claim-not-found-on-aggravation-rights-retrieve) | — | [SQL-013](sql/SQL-013.md), [SQL-025](sql/SQL-025.md), [SQL-033](sql/SQL-033.md), [SQL-034](sql/SQL-034.md) |
| [Code-table caching](operations/code-table-caching.md) | Cache PPD and reserve-services reference code tables for the process lifetime | First call to a `mdlPPD`/`mdlReserveServices` accessor, or explicit Refresh | Optional Refresh flag | Cached code-table collections | — | [CL_PPD_BODY_PART_CODE](database-tables.md#cl_ppd_body_part_code), [CL_RESERVE_VOC_SERV_TYPE_CODE](database-tables.md#cl_reserve_voc_serv_type_code) | [SQL-026](sql/SQL-026.md), [SQL-035](sql/SQL-035.md) |
| [PPD award calculation](operations/ppd-award-calc.md) | Calculate scheduled and unscheduled PPD degree-award amounts with an auditable calculation trail | Caller invokes `GetAwardAmount(...)` | Degrees, effective date | Award amount, `CalcProof` audit trail | — | [CL_PPD_SCHED_DEGREE_AWARD](database-tables.md#cl_ppd_sched_degree_award), [CL_PPD_UNSCHED_DEGREE_AWARD](database-tables.md#cl_ppd_unsched_degree_award) | [SQL-027](sql/SQL-027.md), [SQL-028](sql/SQL-028.md) |

## Process flow diagram
The following diagram visualizes the primary benefit-payment stop processing flow.

```mermaid
flowchart TD
	Start([ProcessBenefitPayment called]) --> Retrieve[Retrieve active benefit schedules<br>REMAINING_PAYMENT_COUNT > 0]
	Retrieve --> Check{hasReleasedScheduledPayment?}
	Check -->|Yes| UpdateSched[Update schedule<br>RemainingPaymentCount = 1]
	Check -->|No| DeletePayment[Delete benefit payment row]
	UpdateSched --> RowsA{RowsAffected = 0?}
	DeletePayment --> RowsB{RowsAffected = 0?}
	RowsA -->|Yes| ErrUpd([Error #PAYUPD#<br>return False])
	RowsA -->|No| Released([StopStatus.Released])
	RowsB -->|Yes| ErrDel([Error #PAYDEL#<br>return False])
	RowsB -->|No| Deleted([StopStatus.Deleted])
```

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Benefit-payment stop processing](operations/benefit-payment-stop.md) | [SQL-011](sql/SQL-011.md), [SQL-012](sql/SQL-012.md), [SQL-038](sql/SQL-038.md), [SQL-039](sql/SQL-039.md), [SQL-053](sql/SQL-053.md), [SQL-054](sql/SQL-054.md) | [CL_BENEFIT_SCHEDULE](database-tables.md#cl_benefit_schedule), [CL_BENEFIT_PAYMENT](database-tables.md#cl_benefit_payment) | Read / Write |
| [Set award to Pending](operations/award-pending.md) | [SQL-031](sql/SQL-031.md), [SQL-032](sql/SQL-032.md), [SQL-048](sql/SQL-048.md), [SQL-049](sql/SQL-049.md) | [CL_AWARD](database-tables.md#cl_award), [CL_BENEFIT_PAYMENT](database-tables.md#cl_benefit_payment) | Read / Write |
| [Injured body-part maintenance](operations/injured-body-part.md) | [SQL-008](sql/SQL-008.md), [SQL-036](sql/SQL-036.md), [SQL-050](sql/SQL-050.md), [SQL-051](sql/SQL-051.md), [SQL-062](sql/SQL-062.md) | [CL_WORKER_INJURED_BODY_PART](database-tables.md#cl_worker_injured_body_part), [CL_INJURY_CLAIM](database-tables.md#cl_injury_claim) | Read / Write |
| [Dynamic claim list generation](operations/claim-list-generation.md) | [SQL-019](sql/SQL-019.md) | (caller-determined) | Read |
| [DCBS 1502 transfer handling](operations/1502-transfer.md) | [SQL-001](sql/SQL-001.md), [SQL-004](sql/SQL-004.md), [SQL-009](sql/SQL-009.md), [SQL-010](sql/SQL-010.md), [SQL-037](sql/SQL-037.md), [SQL-052](sql/SQL-052.md) | [CL_1502_DCBS_TRANSFER](database-tables.md#cl_1502_dcbs_transfer) | Read / Write |
| [Stored-procedure read models](operations/stored-proc-lookups.md) | [SQL-013](sql/SQL-013.md), [SQL-025](sql/SQL-025.md), [SQL-033](sql/SQL-033.md), [SQL-034](sql/SQL-034.md) | — (stored procedures) | Read |
| [Code-table caching](operations/code-table-caching.md) | [SQL-026](sql/SQL-026.md), [SQL-035](sql/SQL-035.md) | [CL_PPD_BODY_PART_CODE](database-tables.md#cl_ppd_body_part_code), [CL_RESERVE_VOC_SERV_TYPE_CODE](database-tables.md#cl_reserve_voc_serv_type_code) | Read |
| [PPD award calculation](operations/ppd-award-calc.md) | [SQL-027](sql/SQL-027.md), [SQL-028](sql/SQL-028.md) | [CL_PPD_SCHED_DEGREE_AWARD](database-tables.md#cl_ppd_sched_degree_award), [CL_PPD_UNSCHED_DEGREE_AWARD](database-tables.md#cl_ppd_unsched_degree_award) | Read |

## Failure and edge-case behavior
- Benefit-payment stop processing raises `#PAYUPD#` or `#PAYDEL#` and returns `False` when the corresponding update/delete affects zero rows.
- Set award to Pending reports "The Award was NOT succesfully updated to Pending" (spelling as in source) when the update fails; unlike most other updates in this library, [SQL-048](sql/SQL-048.md) has no `UPDATE_NUM` optimistic-concurrency predicate.*
- Aggravation-rights and timeliness-of-first-payment stored-procedure retrieves raise "Claim Not Found" when the cursor returns no rows ([BR-008](business-rules.md#br-008-claim-not-found-on-aggravation-rights-retrieve)).
- Dynamic claim-list generation executes caller-supplied SQL text with only a single `:ID` bind parameter — a SQL-injection and maintainability risk whose actual exposure depends on callers, none of which exist in this repository.*
- Code-table caches in `mdlPPD` / `mdlReserveServices` have no expiry or synchronization and are process-lifetime, not thread-safe.*

## Stored procedure operations

Operations implemented in Oracle stored procedures referenced by this library.

| Operation | Description | Source | Link |
| --- | --- | --- | --- |
| Calculate statutory weekly wage | Validates the injury date, wage amount, pay-period code and the period-specific hours/days inputs; resolves the injury-date-dependent weeks-per-month factor and the pre-1995 minimum-days-per-week floor; then converts the supplied wage to a weekly amount according to the pay-period code. | `sp82286_statutoryweeklywage` | [Details](procedures/sp82286-statutoryweeklywage.md#operations) |
| Emit calculation result set | Opens the `recordset` REF CURSOR over `dual`, projecting the local variables as `StatutoryWeeklyWage` and `ErrorMessage` columns; called from every exit path so the caller always receives exactly one row. | `sp82286_statutoryweeklywage.SelectStatutoryWeeklyWage` | [Details](procedures/sp82286-statutoryweeklywage.md#operations) |
| Consume calculation result | Reads the single cursor row into `m_StatutoryWeeklyWage` and `m_ErrorMessage`, exposed as read-only properties; wrapped in an empty `Try … Catch`. | `clsStatutoryWeeklyWageCalculation.AfterRetrieve` | [Details](procedures/sp82286-statutoryweeklywage.md#operations) |

No operations are recorded for `sp82046_CalcAggRightDates`, `sp82067_TimelinessOf1stPayment`, or `sp82289_medicallystationarydt` — these three are `not-found-by-cli` and no procedure body was retrieved for them.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Procedures](procedures/index.md)
- [API reference](api/index.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- SAIF.Business.Claim/clsActiveBenefitSchedule.vb
- SAIF.Business.Claim/clsSetAwardPaymentPending.vb
- SAIF.Business.Claim/clsWorkerInjuredBodyPart.vb
- SAIF.Business.Claim/clsClaimListGenerator.vb
- SAIF.Business.Claim/cls1502Transfer.vb
- SAIF.Business.Claim/clsAggRightDates.vb
- SAIF.Business.Claim/mdlPPD.vb
- SAIF.Business.Claim/mdlReserveServices.vb
- SAIF.Business.Claim/clsPPDUnscheduledDegreeAwards.vb
